package com.demo.web_06;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/new")
public class NewServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException {
        response.getWriter().println("NewServlet");
//        PrintWriter out = response.getWriter();
//        out.println("<html>");
//        out.println("<head><title>My Servlet Response</title></head>");
//        out.println("<body>");
//        out.println("<h1>Hello from MyServlet!</h1>");
//        out.printf("<p>The current time is: %s</p>", new java.util.Date().toString());
//        out.println("</body>");
//        out.println("</html>");

    }

    @Override
    public void init() throws ServletException {
/*
    作用：调用父类的 init() 方法，完成 Servlet 的初始化工作。
        位置：通常在自定义 Servlet 的 init() 方法中调用。
        重要性：确保父类的初始化逻辑被执行，包括设置配置参数、初始化资源等。
        */
        super.init();
    }

    @Override
    public void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        作用：调用父类的 service() 方法，处理客户端请求并生成响应。
//位置：通常在自定义 Servlet 的 doGet()、doPost() 等具体 HTTP 方法中调用，或直接在 service() 方法中调用。
//重要性：确保父类的默认请求处理逻辑被执行，特别是在你不想重写所有 HTTP 方法时。

//        注意事项
//        选择性调用：如果你已经实现了具体的请求处理逻辑（如 doGet() 或 doPost()），则不需要再调用 super.service(req, resp)。但如果你希望保留父类的默认行为，可以选择调用它。
//        性能考虑：频繁调用 super.service(req, resp) 可能会影响性能，特别是在高并发场景下。确保只在必要时调用。
//        3. 总结
//        super.init()：确保父类的初始化逻辑被执行，是每个自定义 Servlet 的 init() 方法中必不可少的部分。
//        super.service(req, resp)：确保父类的默认请求处理逻辑被执行，适用于不想重写所有 HTTP 方法的情况。
//        通过正确使用这两个方法，你可以确保自定义 Servlet 在初始化和请求处理过程中遵循标准的行为，并且能够灵活地扩展和修改默认功能。
        super.service(req, resp);
    }
}